#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int N=1e5+10;
bool numset[N];
int bfs(int start,int end)
{
    // 如果起点已经是终点，直接返回0
    if (start == end) return 0;

    queue<int> q;
    q.push(start);
    numset[start] = true;  // 标记起点已访问
    int ret = 0;

	while (!q.empty()) 
	{
        int nums = q.size();
        ret++;  // 当前层数+1
        
        while (nums--) 
        {
            int x = q.front();
            q.pop();

			int x1=x+1;
			if(x1<N&&!numset[x1])
			{
				q.push(x1);
				numset[x1]=true;
			}

			int x2=x*2;
			if(x2 < N&&!numset[x2])
			{
				q.push(x2);
				numset[x2]=true;
			}

			int x3=x-1;
			if(x3>=1&&!numset[x3])
			{
				numset[x3]=true;
				q.push(x3);
			}

			if(x1==end||x2==end||x3==end)
			{
				return ret;
			}
		}
	}
	return -1;
}

int main()
{
	int n;cin>>n;
	while(n--)
	{
		int start,end;cin>>start>>end;
		memset(numset,false,sizeof(numset));
		cout<<bfs(start,end)<<endl;
	}
}